/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dominio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 *
 * @author ronan
 */
@Entity
@Table(name = "turma")
public class Turma implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(unique = true, nullable = false)
    private int codigoTurma;
    @Column
    private int ano;
    @Column
    private int periodo;
    @Column
    private int horario;
    @Column(length=255)
    private String local;
    @Column
    private int numeroVagas;
    @JoinColumn(name = "codigoDisciplina", referencedColumnName = "codigoDisciplina")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Disciplina disciplina;
    @ManyToMany(targetEntity = model.dominio.Aluno.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @JoinTable(name = "turma_aluno", joinColumns = {
        @JoinColumn(name = "codigoTurma")}, inverseJoinColumns = {
        @JoinColumn(name = "codigoAluno")})
    private List <Aluno> alunos = new ArrayList<>();
    @JoinColumn(name = "codigoProfessor", referencedColumnName = "codigoProfessor")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Professor professor;
    
    

    public Turma(int ano, int periodo, int horario, String local, int numeroVagas) {
        super();
        this.ano = ano;
        this.periodo = periodo;
        this.horario = horario;
        this.local = local;
        this.numeroVagas = numeroVagas;

    }

    public Turma(String dados) {
        super();
        String[] arrayDados = dados.split("%%%");
        this.codigoTurma = Integer.parseInt(arrayDados[0]);
        this.ano = Integer.parseInt(arrayDados[1]);
        this.periodo = Integer.parseInt(arrayDados[2]);
        this.horario = Integer.parseInt(arrayDados[3]);
        this.local = arrayDados[4];
        this.numeroVagas = Integer.parseInt(arrayDados[5]);
    }
    
    public Turma() {
    }

    /**
     * @return the ano
     */
    public int getAno() {
        return ano;
    }

    /**
     * @param ano the ano to set
     */
    public void setAno(int ano) {
        this.ano = ano;
    }

    /**
     * @return the periodo
     */
    public int getPeriodo() {
        return periodo;
    }

    /**
     * @param periodo the periodo to set
     */
    public void setPeriodo(int periodo) {
        this.periodo = periodo;
    }
    
     /**
     * @return the professor
     */
    public Professor getProfessor() {
        return professor;
    }

    /**
     * @param professor the professor to set
     */
    public void setProfessor(Professor professor) {
        this.professor = professor;
    }

    /**
     * @return the atividades
     */
    
    
   
    /**
     * @return the horario
     */
    public int getHorario() {
        return horario;
    }

    /**
     * @param horario the horario to set
     */
    public void setHorario(int horario) {
        this.horario = horario;
    }

    /**
     * @return the local
     */
    public String getLocal() {
        return local;
    }

    /**
     * @param local the local to set
     */
    public void setLocal(String local) {
        this.local = local;
    }

    /**
     * @return the numeroVagas
     */
    public int getNumeroVagas() {
        return numeroVagas;
    }

    /**
     * @param numeroVagas the numeroVagas to set
     */
    public void setNumeroVagas(int numeroVagas) {
        this.numeroVagas = numeroVagas;
    }

    @Override
    public String toString() {
        Aluno aluno;
        String listaAlunos="{";
        for (int i = 0; i < alunos.size(); i++) {
            aluno = alunos.get(i);
            listaAlunos+=aluno.getCodigoAluno();
            if(i<(alunos.size()-1))
                listaAlunos+=",";
        }
        listaAlunos+="}";
        return this.getCodigoTurma() + "%%%" + this.ano + "%%%" + this.periodo + "%%%" + this.horario + "%%%" + this.local + "%%%" + this.numeroVagas + "%%%" + disciplina.getCodigoDisciplina()+"%%%"+listaAlunos;
    }

    /**
     * @return the codigoTurma
     */
    public int getCodigoTurma() {
        return codigoTurma;
    }

    /**
     * @param codigoTurma the codigoTurma to set
     */
    public void setCodigoTurma(int codigoTurma) {
        this.codigoTurma = codigoTurma;
    }

    /**
     * @return the disciplina
     */
    public Disciplina getDisciplina() {
        return disciplina;
    }

    /**
     * @param disciplina the disciplina to set
     */
    public void setDisciplina(Disciplina disciplina) {
        this.disciplina = disciplina;
    }

    /**
     * @return the alunos
     */
    public List<Aluno> getAlunos() {
        return alunos;
    }

    /**
     * @param alunos the alunos to set
     */
    public void setAlunos(ArrayList<Aluno> alunos) {
        this.alunos = alunos;
    }
}
